home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / esc.jar / com / extensibility / saf / impl / SelectorXPath.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-06-30  |  3.2 KB  |  160 lines

  1. package com.extensibility.saf.impl;
  2.  
  3. import org.w3c.dom.Attr;
  4. import org.w3c.dom.Element;
  5. import org.w3c.dom.Node;
  6.  
  7. public class SelectorXPath {
  8.    private String pathString;
  9.    private boolean isSimplePath;
  10.    private boolean isAbsolutePath;
  11.  
  12.    public SelectorXPath(String var1) {
  13.       if (var1.startsWith("//")) {
  14.          var1 = var1.substring(2);
  15.       }
  16.  
  17.       this.pathString = var1;
  18.       this.isSimplePath = this.pathString.indexOf("//", 0) == -1;
  19.       this.isAbsolutePath = this.pathString.startsWith("/");
  20.    }
  21.  
  22.    public boolean matches(SelectorXPath var1) {
  23.       if (var1.isAbsolutePath && var1.isSimplePath) {
  24.          if (this.isSimplePath) {
  25.             if (this.isAbsolutePath) {
  26.                return this.pathString.equals(var1.pathString);
  27.             } else {
  28.                String var7 = String.valueOf("/").concat(String.valueOf(this.pathString));
  29.                return var1.pathString.endsWith(var7);
  30.             }
  31.          } else {
  32.             ReversePathTokenizer var2 = new ReversePathTokenizer(this.pathString);
  33.             ReversePathTokenizer var3 = new ReversePathTokenizer(var1.pathString);
  34.             boolean var4 = false;
  35.  
  36.             while(var2.hasMoreTokens()) {
  37.                String var5 = var2.nextToken();
  38.                if (var5.equals("")) {
  39.                   var4 = true;
  40.                } else {
  41.                   if (!var3.hasMoreTokens()) {
  42.                      return false;
  43.                   }
  44.  
  45.                   String var6;
  46.                   for(var6 = var3.nextToken(); !var5.equals(var6) && var4 && var3.hasMoreTokens(); var6 = var3.nextToken()) {
  47.                   }
  48.  
  49.                   if (!var5.equals(var6)) {
  50.                      return false;
  51.                   }
  52.  
  53.                   var4 = false;
  54.                }
  55.             }
  56.  
  57.             if (this.isAbsolutePath) {
  58.                return !var3.hasMoreTokens();
  59.             } else {
  60.                return true;
  61.             }
  62.          }
  63.       } else {
  64.          throw new RuntimeException("matchPath must be a full path.");
  65.       }
  66.    }
  67.  
  68.    public boolean matches(Element var1) {
  69.       return this.matches(var1, (Attr)null);
  70.    }
  71.  
  72.    public boolean matches(Element var1, Attr var2) {
  73.       ReversePathTokenizer var3 = new ReversePathTokenizer(this.pathString);
  74.       boolean var4 = false;
  75.  
  76.       while(var3.hasMoreTokens()) {
  77.          String var5 = var3.nextToken();
  78.          if (!var5.equals("")) {
  79.             if (var2 != null) {
  80.                if (!var5.startsWith("@") || !var5.substring(1).equals(var2.getName())) {
  81.                   return false;
  82.                }
  83.  
  84.                var2 = null;
  85.             } else {
  86.                if (var1 == null) {
  87.                   return false;
  88.                }
  89.  
  90.                String var6;
  91.                do {
  92.                   var6 = var1.getNodeName();
  93.                   Node var7 = var1.getParentNode();
  94.                   if (var7 instanceof Element) {
  95.                      var1 = (Element)var7;
  96.                   } else {
  97.                      var1 = null;
  98.                   }
  99.                } while(!var5.equals(var6) && var4 && var1 != null);
  100.  
  101.                if (!var5.equals(var6)) {
  102.                   return false;
  103.                }
  104.  
  105.                var4 = false;
  106.             }
  107.          } else {
  108.             var4 = true;
  109.          }
  110.       }
  111.  
  112.       if (this.isAbsolutePath) {
  113.          return var1 == null;
  114.       } else {
  115.          return true;
  116.       }
  117.    }
  118.  
  119.    public static void main(String[] var0) {
  120.       try {
  121.          boolean var5 = (new SelectorXPath("xyz")).matches(new SelectorXPath("abc"));
  122.       } catch (RuntimeException var4) {
  123.          boolean var1 = true;
  124.       }
  125.  
  126.       try {
  127.          boolean var7 = (new SelectorXPath("xyz")).matches(new SelectorXPath("/a//xyz"));
  128.       } catch (RuntimeException var3) {
  129.          boolean var6 = true;
  130.       }
  131.  
  132.       boolean var8 = (new SelectorXPath("xyz")).matches(new SelectorXPath("/abc"));
  133.       var8 = (new SelectorXPath("xyz")).matches(new SelectorXPath("/xyz/a"));
  134.       var8 = (new SelectorXPath("/xyz")).matches(new SelectorXPath("/a/xyz"));
  135.       var8 = (new SelectorXPath("abc//xyz")).matches(new SelectorXPath("/abc"));
  136.       var8 = (new SelectorXPath("xyz/@a")).matches(new SelectorXPath("/xyz"));
  137.       var8 = (new SelectorXPath("xyz")).matches(new SelectorXPath("/xyz/@a"));
  138.       var8 = (new SelectorXPath("xyz/@aa")).matches(new SelectorXPath("/xyz/@a"));
  139.       var8 = (new SelectorXPath("a//b//x")).matches(new SelectorXPath("/a/x"));
  140.       var8 = (new SelectorXPath("a//b//x")).matches(new SelectorXPath("/b/a/x"));
  141.       var8 = (new SelectorXPath("a//b/c//x")).matches(new SelectorXPath("/a/c/x"));
  142.       var8 = (new SelectorXPath("x")).matches(new SelectorXPath("/x"));
  143.       var8 = (new SelectorXPath("/x")).matches(new SelectorXPath("/x"));
  144.       var8 = (new SelectorXPath("x")).matches(new SelectorXPath("/a/x"));
  145.       var8 = (new SelectorXPath("a/x")).matches(new SelectorXPath("/a/x"));
  146.       var8 = (new SelectorXPath("/a/x")).matches(new SelectorXPath("/a/x"));
  147.       var8 = (new SelectorXPath("a//x")).matches(new SelectorXPath("/a/x"));
  148.       var8 = (new SelectorXPath("a//x")).matches(new SelectorXPath("/a/b/x"));
  149.       var8 = (new SelectorXPath("a//b//x")).matches(new SelectorXPath("/a/b/x"));
  150.       var8 = (new SelectorXPath("a//b//x")).matches(new SelectorXPath("/a/b/a/x"));
  151.       var8 = (new SelectorXPath("a//b/c//x")).matches(new SelectorXPath("/a/b/c/x"));
  152.       var8 = (new SelectorXPath("x/@a")).matches(new SelectorXPath("/x/@a"));
  153.       var8 = (new SelectorXPath("b/x/@a")).matches(new SelectorXPath("/a/b/x/@a"));
  154.       var8 = (new SelectorXPath("a/b/x/@a")).matches(new SelectorXPath("/a/b/x/@a"));
  155.       var8 = (new SelectorXPath("a//@a")).matches(new SelectorXPath("/a/b/x/@a"));
  156.       var8 = (new SelectorXPath("a//x/@a")).matches(new SelectorXPath("/a/b/x/@a"));
  157.       var8 = true;
  158.    }
  159. }
  160.